home *** CD-ROM | disk | FTP | other *** search
/ HyperLib 1997 Winter - Disc 1 / HYPERLIB-1997-Winter-CD1.ISO.7z / HYPERLIB-1997-Winter-CD1.ISO / オンラインウェア / PRG / PowerFantasm 4.10 unreg.sit / PowerFantasm 410 unreg / PowerFantasm™ / Fantasm V4 headers / LS_PPC_Macros.def < prev    next >
Text File  |  1996-06-21  |  3KB  |  133 lines

  1. **Lightsoft standard PPC macros (c) 1995/6.
  2. **bil (branch immedaite long) is used for routines that have been defined as a 
  3. **toc entry using the 'toc_routine' directive. Useful for >16 bit branches
  4. bil:    macro
  5.     ifc    "","¥1"    *needs a label,else we fail
  6.      fail
  7.     endc
  8.     lwz    r10,[T]¥1(rtoc)    *its a toc call
  9.     mtctr    r10
  10.     bctr
  11.     endm
  12.  
  13. **bill is same as bil, but puts return address in link register so callee can get back via
  14. **link.
  15. bill:    macro
  16.     ifc    "","¥1"    *needs a label else we fail
  17.      fail
  18.     endc
  19.     lwz    r10,[T]¥1(rtoc)    *its a toc call
  20.     mtctr    r10
  21.     bctrl
  22.     endm
  23. ***************************************************************
  24. **Clr - clears a register
  25. clr:    macro
  26.     ifne    NARG-1        *Needs 1 argument
  27.      fail
  28.     endif
  29.     
  30.     sub    ¥1,¥1,¥1
  31.     endm    
  32. ****************************************************************
  33. **inc - increments a register by 1
  34. inc:    macro
  35.     ifne    NARG-1        *Needs 1 argument
  36.      fail
  37.     endif
  38.     addic    ¥1,¥1,1
  39.     endm
  40.  
  41. ****************************************************************
  42. **dec - decrements a register by 1
  43. dec:    macro
  44.     ifne    NARG-1        *Needs 1 argument
  45.      fail
  46.     endif
  47.     subic    ¥1,¥1,1
  48.     endm
  49.  
  50. ************
  51. **Xcall import_name
  52. **eg Xcall SysBeep
  53. **Glue code to system functions
  54. **Can be assumed to destroy lr,ctr,d3-12
  55. Xcall:    macro    
  56. *set up params
  57.     lwz    r12,¥1(rtoc)    *load t-vector
  58.     stw    R2,20(sp)    *save my RTOC
  59.     lwz    r0,0(r12)     *get callee address
  60.     lwz    R2,4(r12)    *set callee RTOC
  61.     mtctr    r0        *prepare branch
  62.     bctrl            *bsr to callee
  63.  
  64.     lwz    r2,20(sp)    *get my toc back
  65.     endm
  66.  
  67. ********start up code
  68. **Saves the gpr's and sets up the stack and BSS pointer - r30
  69. start_up:    macro
  70.     mflr    r0                * Get link register
  71.     stw    r0,8(sp)            * Store the link resgister on the stack
  72. **save r10-31
  73.     stw    r10,-88(sp)
  74.     stw    r11,-84(sp)
  75.     stw    r12,-80(sp)
  76.     stw    r13,-76(sp)
  77.     stw    r14,-72(sp)
  78.     stw    r15,-68(sp)
  79.     stw    r16,-64(sp)
  80.     stw    r17,-60(sp)
  81.     stw    r18,-56(sp)
  82.     stw    r19,-52(sp)
  83.     stw    r20,-48(sp)
  84.     stw    r21,-44(sp)
  85.     stw    r22,-40(sp)
  86.     stw    r23,-36(sp)
  87.     stw    r24,-32(sp)
  88.     stw    r25,-28(sp)
  89.     stw    r26,-24(sp)
  90.     stw    r27,-20(sp)
  91.     stw    r28,-16(sp)
  92.     stw    r29,-12(sp)
  93.     stw    r30,-8(sp)
  94.     stw    r31,-4(sp)
  95.     stwu    sp,-64+88(sp)        * skip over the stack space where the caller
  96.  
  97.     lwz    r30,(RTOC)    *load global data (bss) pointer - first entry in TOC
  98.  
  99.     endm
  100.  
  101. *****************************
  102. **tidy_up restores the gp regs and restores the stack
  103. tidy_up:    macro
  104.  
  105.     lwz    r0,64+8+88(sp)    * Get the saved link register
  106.     mtlr    r0            * put saved link register in link register
  107.     addi    sp,sp,$40+88    * Reset the stack pointer
  108. **restore r10-31
  109.     lwz    r10,-88(sp)
  110.     lwz    r11,-84(sp)
  111.     lwz    r12,-80(sp)
  112.     lwz    r13,-76(sp)
  113.     lwz    r14,-72(sp)
  114.     lwz    r15,-68(sp)
  115.     lwz    r16,-64(sp)
  116.     lwz    r17,-60(sp)
  117.     lwz    r18,-56(sp)
  118.     lwz    r19,-52(sp)
  119.     lwz    r20,-48(sp)
  120.     lwz    r21,-44(sp)
  121.     lwz    r22,-40(sp)
  122.     lwz    r23,-36(sp)
  123.     lwz    r24,-32(sp)
  124.     lwz    r25,-28(sp)
  125.     lwz    r26,-24(sp)
  126.     lwz    r27,-20(sp)
  127.     lwz    r28,-16(sp)
  128.     lwz    r29,-12(sp)
  129.     lwz    r30,-8(sp)
  130.     lwz    r31,-4(sp)
  131.     endm
  132.  
  133.